// const oo = { a: 1 };
// Object.defineProperty(oo, "name", {
//   value: "Ram",
//   writable: true,
//   configurable: false,
// });
// oo.name = 1;
// console.log(oo.name);
// console.log(Object.getOwnPropertyDescriptor(oo, "name"));

// Object.defineProperty(oo, "name", {
//   writable: true,
// });

// const obj = Object.create(Object.prototype, {
//   _x: {
//     value: 1,
//     writable: true,
//   },
//   x: {
//     get: function () {
//       return this._x;
//     },
//     set: function (value) {
//       if (typeof value !== "number") {
//         throw new Error("value type is number");
//       }
//       this._x = value;
//     },
//   },
// });

// obj.x = "1";

// const obj = {
//   _x: 1,
//   get x() {
//     return this._x;
//   },
//   set x(value) {
//     if (typeof value !== "number") {
//       throw new Error("请输入数字");
//     }
//     this._x = value;
//   },
// };

// console.log(obj.x);

// obj.x = 2;

// console.log(obj.x);
const obj = { a: 1, b: 2 };
Object.defineProperties(obj, {
  c: {
    value: 1,
    enumerable: false,
  },
});

Object.preventExtensions(obj);

obj.d = 1;
const a = Object.getOwnPropertyNames(obj);

console.log(a);
